package iso3.pt.action;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import iso3.pt.model.Alumno;
import iso3.pt.model.Asignatura;
import iso3.pt.model.Evaluacion;
import iso3.pt.model.Unidad;
import iso3.pt.service.PtDaoService;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.Preparable;

public class SubjectAction extends ActionSupport implements Preparable
{
	private static final long serialVersionUID = 1L;
	private Alumno alumno;
	private Asignatura asignatura;
	private int subjectID;
	private int studentDNI;
	private String concept;
	private float mark;
	private List<Evaluacion> listaEvaluaciones;
	private List<Unidad> listaUnidades;
	private PtDaoService hibernateDAO=null;

//get y sets-------------------------------------------------------	
	
	public Alumno getAlumno() {
		return alumno;
	}

	public void setAlumno(Alumno alumno) {
		this.alumno = alumno;
	}

	public Asignatura getAsignatura() {
		return asignatura;
	}

	public void setAsignatura(Asignatura asignatura) {
		this.asignatura = asignatura;
	}

	public int getSubjectID() {
		return subjectID;
	}

	public void setSubjectID(int subjectID) {
		this.subjectID = subjectID;
	}

	public int getStudentDNI() {
		return studentDNI;
	}

	public void setStudentDNI(int studentDNI) {
		this.studentDNI = studentDNI;
	}

	public String getConcept() {
		return concept;
	}

	public void setConcept(String concept) {
		this.concept = concept;
	}

	public float getMark() {
		return mark;
	}

	public void setMark(float mark) {
		this.mark = mark;
	}
	
	public List<Evaluacion> getListaEvaluaciones() {
		return listaEvaluaciones;
	}

	public void setListaEvaluaciones(List<Evaluacion> listaEvaluaciones) {
		this.listaEvaluaciones = listaEvaluaciones;
	}
	
	public List<Unidad> getListaUnidades() 
	{
		return listaUnidades;
	}

	public void setListaUnidades(List<Unidad> listaUnidades) 
	{
		this.listaUnidades = listaUnidades;
	}
	
//FIN get y sets-------------------------------------------------------
	
	public void prepare() throws Exception 
	{
		if (this.hibernateDAO == null){
			this.hibernateDAO= new PtDaoService();
		}
		
		this.alumno = this.hibernateDAO.getAlumno(studentDNI);
		this.asignatura = this.hibernateDAO.getAsignatura(subjectID);
	
	}
	
//do's-------------------------------------------------------
	
	public String doShowStudentSubjectMarks() //para visualizar solo las de una asignatura
	{	 
		
        this.listaEvaluaciones = new ArrayList<Evaluacion>();
        for(Iterator<Evaluacion> i = this.hibernateDAO.getEvaluaciones(subjectID, studentDNI).iterator(); i.hasNext();)
        {
        	Evaluacion eval = i.next();
        	listaEvaluaciones.add(eval);
        	
        }
		return SUCCESS;
	}
	
	public String doCancelSubjectlisting()
	{
		@SuppressWarnings("rawtypes")
		Map session = ActionContext.getContext().getSession();
		/*como accedemos de 2 sitios (estudiantes y profesor) dependiendo de cual 
		sea el objeto de sesion(el logueado) ira a un sitio u a otro al dar a cancel*/
		
		String resul = "";
		if ( session.get("logged-in") instanceof iso3.pt.model.Profesor)
			resul = "backSubjectStudents";
		else
			resul = "backStudentSubjects";
		
		return resul;
	}
	
	public String doShowSubjectsMarkList() //para visualizar todas las evaluaciones de un alumno
	{
		//cargamos otra vez el alumno porque a veces no se ejecuta el prepare
		this.alumno = (Alumno)ActionContext.getContext().getSession().get("logged-in");
		listaEvaluaciones = new ArrayList<Evaluacion>();
		
		for(Iterator<Evaluacion> i = this.alumno.getEvaluaciones().iterator(); i.hasNext();)
        {
        	Evaluacion eval = i.next();
        	listaEvaluaciones.add(eval);
        }
		return "showSubjectMarkList";
	}
	
	public String doShowSubjectUnits()
	{
		this.listaUnidades = new ArrayList<Unidad>();
		for(Iterator<Unidad> i = this.hibernateDAO.getUnidades(subjectID).iterator(); i.hasNext();)
        {
        	Unidad unit = i.next();
        	listaUnidades.add(unit);
        }
		return "showUnitList";
	}
	
	public String doCancelEvaluations()
	{	
		return "backStudentSubjects";
	}
	
//FIN get y sets-------------------------------------------------------

}
